www.gusucode.com > VC++下的串行数据通信以及八个串口编程实例- > VC++下的串行数据通信以及八个串口编程实例-/第7章 智能安防报警系统/LogDlg.cpp

    // LogDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Alert.h"
#include "LogDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLogDlg dialog


CLogDlg::CLogDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CLogDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CLogDlg)
	m_strCj = _T("");
	m_strBf = _T("");
	m_strTime = _T("");
	//}}AFX_DATA_INIT
}


void CLogDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLogDlg)
	DDX_Control(pDX, IDC_COMBOTIME, m_comboTime);
	DDX_Control(pDX, IDC_COMBOBF, m_comboBf);
	DDX_Control(pDX, IDC_COMBOACT, m_comboAct);
	DDX_Control(pDX, IDC_LIST1, m_logList);
	DDX_CBString(pDX, IDC_COMBOACT, m_strCj);
	DDX_CBString(pDX, IDC_COMBOBF, m_strBf);
	DDX_CBString(pDX, IDC_COMBOTIME, m_strTime);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLogDlg, CDialog)
	//{{AFX_MSG_MAP(CLogDlg)
	ON_BN_CLICKED(IDFIND, OnFind)
	ON_BN_CLICKED(IDDELETE, OnDelete)
	ON_BN_CLICKED(IDEXIT, OnExit)
	ON_BN_CLICKED(IDSHOWALL, OnShowall)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLogDlg message handlers

BOOL CLogDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	//添加表头
	m_logList.InsertColumn(0,"布控名称");
	m_logList.InsertColumn(1,"触发时间");
	m_logList.InsertColumn(2,"处警动作");
	CRect rect;
	m_logList.GetClientRect(&rect);
	m_logList.SetColumnWidth(0,rect.Width()/5);
	m_logList.SetColumnWidth(1,2*rect.Width()/5);
	m_logList.SetColumnWidth(2,2*rect.Width()/5);

	//打开纪录集Log
	_RecordsetPtr r;
	r.CreateInstance(_uuidof(Recordset));
	CString s="select * from log";
	_bstr_t bs=s.AllocSysString();
	CAlertApp* pApp=(CAlertApp*)::AfxGetApp();
	r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
	if(!r->adoEOF && !r->BOF)
	{
		//添加下拉框内容和列表控件条目
		r->MoveFirst();
		while(!r->adoEOF)
		{
			m_comboAct.AddString(LPTSTR(_bstr_t(r->GetCollect("cjname"))));
			m_comboBf.AddString(LPTSTR(_bstr_t(r->GetCollect("bfname"))));
			m_comboTime.AddString(LPTSTR(_bstr_t(r->GetCollect("Date"))));
			
			int nItem = m_logList.InsertItem(m_logList.GetItemCount(),LPTSTR(_bstr_t(r->GetCollect("bfname"))));
			m_logList.SetItemText(nItem,1,_bstr_t(r->GetCollect("date"))+_bstr_t(" ")+_bstr_t(r->GetCollect("time")));
			m_logList.SetItemText(nItem,2,_bstr_t(r->GetCollect("cjname")));
			r->MoveNext();
		}
	}
	r->Close();
	r=NULL;
	int nItem=m_comboAct.AddString("全部");
	m_comboAct.SetCurSel(nItem);
	nItem=m_comboBf.AddString("全部");
	m_comboBf.SetCurSel(nItem);	
	nItem=m_comboTime.AddString("全部");
	m_comboTime.SetCurSel(nItem);
	/*
   cmbBf.ListIndex = 0
   cmbTime.ListIndex = 0
   cmbCj.ListIndex = 0
*/
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void CLogDlg::OnFind() 
{
	// TODO: Add your control notification handler code here
	_RecordsetPtr r;
	r.CreateInstance(_uuidof(Recordset));
	CString s= GetSql();
	if(s=="")
		::AfxMessageBox("筛选条件不足,请重新筛选");

	m_logList.DeleteAllItems();
	_bstr_t bs=s.AllocSysString();
	TRY
	{
		CAlertApp* pApp=(CAlertApp*)::AfxGetApp();
		r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenStatic,adLockOptimistic,adCmdText);
		if(!r->adoEOF && !r->BOF)
			r->MoveFirst();
		while(!r->adoEOF && !r->BOF)
		{
			int nItem = m_logList.InsertItem(m_logList.GetItemCount(),LPTSTR(_bstr_t(r->GetCollect("bfname"))));
			m_logList.SetItemText(nItem,1,_bstr_t(r->GetCollect("date"))+_bstr_t(" ")+_bstr_t(r->GetCollect("time")));
			m_logList.SetItemText(nItem,2,_bstr_t(r->GetCollect("cjname")));
			r->MoveNext();
		}
	}
	CATCH(CException,e)
	{
		e->ReportError();
	}
	END_CATCH
	
	r->Close();
	r=NULL;	          
	
	
}

void CLogDlg::OnDelete() 
{
	// TODO: Add your control notification handler code here
	int res=::AfxMessageBox("确实要根据筛选条件删除这些记录?",MB_YESNO);
	if(res==IDNO)
		return;

	_RecordsetPtr r;
	r.CreateInstance(_uuidof(Recordset));
	CString s= GetSql();
//	if(s=="")
//		;						//处理
	_bstr_t bs=s.AllocSysString();
	TRY
	{
		CAlertApp* pApp=(CAlertApp*)::AfxGetApp();
		r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenStatic,adLockOptimistic,adCmdText);
		if(!r->adoEOF && !r->BOF)
			r->MoveFirst();
//		else
//			::AfxMessageBox("根据筛选条件未选中记录");
		while(!r->adoEOF && !r->BOF)
		{
			LVFINDINFO info;				//从列表控件中删除
			info.flags = LVFI_STRING |LVFI_PARTIAL;
			info.psz = _bstr_t(r->GetCollect("bfname"));
			int nItem = m_logList.FindItem(&info);
			m_logList.DeleteItem(nItem);

			r->Delete(adAffectCurrent);		// 从数据库中删除
			r->MoveNext();
		}
	}
	CATCH(CException,e)
	{
		e->ReportError();
	}
	END_CATCH
	
	r->Close();
	r=NULL;	          
	
}

void CLogDlg::OnExit() 
{
	// TODO: Add your control notification handler code here
	OnOK();
}

void CLogDlg::OnShowall() 
{
	// TODO: Add your control notification handler code here

	//清空listview准备写入新item
	m_logList.DeleteAllItems();
	//打开纪录集Log
	_RecordsetPtr r;
	r.CreateInstance(_uuidof(Recordset));
	CString s="select * from log";
	_bstr_t bs=s.AllocSysString();
	CAlertApp* pApp=(CAlertApp*)::AfxGetApp();
	r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
	if(!r->adoEOF && !r->BOF)
	{
		//添加列表控件条目
		r->MoveFirst();
		while(!r->adoEOF)
		{
			int nItem = m_logList.InsertItem(m_logList.GetItemCount(),LPTSTR(_bstr_t(r->GetCollect("bfname"))));
			m_logList.SetItemText(nItem,1,_bstr_t(r->GetCollect("date"))+_bstr_t(" ")+_bstr_t(r->GetCollect("time")));
			m_logList.SetItemText(nItem,2,_bstr_t(r->GetCollect("cjname")));
			r->MoveNext();
		}
	}
	r->Close();
	r=NULL;

}

CString CLogDlg::GetSql()
{
	m_comboBf.GetWindowText(m_strBf);		//记录bfname
	m_comboAct.GetWindowText(m_strCj);		//记录cjname
	m_comboTime.GetWindowText(m_strTime);	//记录发生的日期date

	if((m_strBf=="")||(m_strCj=="")||(m_strTime==""))
		return "";

	CString s="select * from log where";
	if(m_strBf!="全部")
		s+=" bfname = '" + m_strBf + "'and";
	if(m_strTime!="全部")
		s+=" date = #" + m_strTime + "# and";
	if(m_strCj!="全部")
		s+=" cjname = '" + m_strCj + "'";

	if(s.Right(1)=="d")
		s=s.Left(s.GetLength()-3);
	if(s.Right(1)=="e")
		s=s.Left(s.GetLength()-5);
	
	return s;
}